package com.hejing.String;

import org.junit.Test;

/**
 * ClassName: StringDemo
 * Package: com.hejing.String
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-04-16 14:33
 * @Version: 1.0
 */
public class StringDemo {

    /**
     * 字符串存储的位置: 字符串常量池
     */
    @Test
    public void test01(){
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1);
        System.out.println(s1 == s2);
    }

    /**
     *
     * String 的不可变性:
     *  (1) 当对字符串变量重新赋值时，需要重新指定一个字符串常量的位置进行赋值，不能再原有的位置进行修改。
     *
     */
    @Test
    public void test02(){
        String s1 = "hello";
        String s2 = "hello";
        s2 = "hi";
        System.out.println(s1);  // hello
    }

    /**
     * 字符串的不可变性:
     *  (2) 当对现有的字符串进行拼接操作时，需要重新开辟空间(new)保存拼接之后的字符串，不能再原有的空间上拼接字符串，
     *      因为字符串具有不可变性。
     */
    @Test
    public void test03(){
        String s1 = "hello";
        String s2 = "hello";

        s2 += " java";
        System.out.println(s1);  // hello
        System.out.println(s2);  // hello java
        System.out.println(s1 == s2) ;  // fasle
    }

    /**
     * 字符串的不可变性:
     *  (3) 当调用字符串的replace方法替换现有的某个字符时，需要重新开辟空间(new)保存修改以后的字符串，不能再原有的空间进行修改，
     *      这同样体现了字符串的不可变性。
     */
    @Test
    public void test04(){
        String s1 = "hello";
        String s2 = "hello";

        String s3 = s2.replace('l', 'w');

        System.out.println(s1); // hello
        System.out.println(s2); // hello
        System.out.println(s3); // hewwo
    }

}





























